<?php

//USELESS


require_once 'classes/Contrat.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Contrats
 * @author Zikrija
 * @date 04.05.2012
 */

class SCcontrat {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute un Contrat
    * @param Contrat Contrat à ajouter
    */
    public function ajouter($unContratAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO contrat " .
                "(id, date, lieu, animal_id, personne_id) VALUES(".
                ":id, :date, :lieu, :animal_id, :personne_id)");

            $query->execute(array(
                'id'           => $unContratAAjouter->getId() ,
                'date'         => $unContratAAjouter->getDate(),
                'lieu'         => $unContratAAjouter->getLieu() ,
                'animal_id'    => $unContratAAjouter->getAnimal_id() ,
                'personne_id'  => $unContratAAjouter->getPersonne_id()    
                ));

            $unContratAAjouter->setId($this->db->lastInsertId());
            $message = new Message("Contrat ajouté");

            $unContratAAjouter->setId($this->db->lastInsertId());

            $query->closeCursor();
        }
        catch(PDOException $e){
            return new Message("Contrat non ajouté: ".$e->getMessage());
        }
        return $unContratAAjouter;
   }
    /**
     * Methode permettant de modifier un Contrat
     * @param Contrat Contrat à modifier
     * @return boolean 
     */
    public function modifier($unContratAModifier){
        try{

            $query =  $this->db->prepare("UPDATE contrat SET ".
                "date = :date, lieu = :lieu , animal_id = :animal_id, ".
                "personne_id = :personne_id ".
                "WHERE id = :id");

            $query->execute(array(
                'id'            => $unContratAModifier->getId(),
                'date'          => $unContratAModifier->getDate(),
                'lieu'          => $unContratAModifier->getLieu() ,
                'animal_id'     => $unContratAModifier->getAnimal_id(),
                'personne_id'   => $unContratAModifier->getPersonne_id()
            ));

            $query->closeCursor();


        }
        catch(PDOException $e){
            return new Message("Contrat non modifié: ".$e->getMessage());
        }
        return $unContratAModifier;
    }
    /**
     * Methode permettant de supprimer un Contrat
     * @param int id du Contrat à supprimer
     * @return boolean 
     */
    public function supprimer($idContratASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM contrat WHERE id = :id");
            $query->execute(array(
                'id'           => $idContratASupprimer
            ));            
            $query->closeCursor();
            
            $message = new Message("Contrat supprimé"); 
        }
        catch(PDOException $e){
            $message = new Message("Contrat non supprimé: ". $e->getMessage());
        }
        return $message;
    }
   
    /**
     * 
     * @param Contrat de recherche sous forme d'objet Contrat
     * @return un tableau d'objet Contrat
     */
    public function lister($ContratALister, $type){
        try{
            $sql="SELECT contrat.* FROM contrat INNER JOIN ".$type." ON ".$type.".contrat_id = contrat.id ";
            $sql_Where="WHERE";
            if($ContratALister!=NULL)
            {
                if($ContratALister->getId()!=NULL)
                    $sql_Where.=" contrat.id = '".$ContratALister->getId()."' AND ";
                if($ContratALister->getDate()!=NULL)
                    $sql_Where.=" contrat.date = '".$ContratALister->getDate()."' AND ";
                if($ContratALister->getLieu()!=NULL)
                    $sql_Where.=" contrat.lieu LIKE '%".$ContratALister->getLieu()."%' AND ";
                if($ContratALister->getAnimal_id()!=NULL)
                    $sql_Where.=" contrat.animal_id = '".$ContratALister->getAnimal_id()."' AND ";
                if($ContratALister->getPersonne_id()!=NULL)
                    $sql_Where.=" contrat.personne_id = '".$ContratALister->getPersonne_id()."' AND ";
            }         
            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where;
            $lesContratsTrouves=NULL;
            $unContratLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unContratLu = new Contrat($row['id'], $row['date'], $row['lieu'], $row['animal_id'], $row['personne_id']);

                $lesContratsTrouves[]=$unContratLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesContratsTrouves=NULL;
        }
        return $lesContratsTrouves;
    } 
    
    public function listerContratSimple($ContratALister){
        try{
            $sql="SELECT * FROM contrat ";
            $sql_Where="WHERE";
            if($ContratALister!=NULL)
            {
                if($ContratALister->getId()!=NULL)
                    $sql_Where.=" contrat.id = '".$ContratALister->getId()."' AND ";
                if($ContratALister->getDate()!=NULL)
                    $sql_Where.=" contrat.date = '".$ContratALister->getDate()."' AND ";
                if($ContratALister->getLieu()!=NULL)
                    $sql_Where.=" contrat.lieu LIKE '%".$ContratALister->getLieu()."%' AND ";
                if($ContratALister->getAnimal_id()!=NULL)
                    $sql_Where.=" contrat.animal_id = '".$ContratALister->getAnimal_id()."' AND ";
                if($ContratALister->getPersonne_id()!=NULL)
                    $sql_Where.=" contrat.personne_id = '".$ContratALister->getPersonne_id()."' AND ";
            }         
            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where;
            $lesContratsTrouves=NULL;
            $unContratLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unContratLu = new Contrat($row['id'], $row['date'], $row['lieu'], $row['animal_id'], $row['personne_id']);

                $lesContratsTrouves[]=$unContratLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesContratsTrouves=NULL;
        }
        return $lesContratsTrouves;
    } 
}

?>
